/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package manejadores;

import com.akcess.exception.*;
import com.akcess.vo.*;
import com.akcess.impl.*;
import com.akcess.dao.*;
import java.sql.*;
import java.util.*;

/**
 * Esta clase se utiliza para realizar las tareas relacionadas con la gestion de los Recursos de tipo Aulas,
 * como creacion, borrado y modificacion de Aulas, entre otras cosas.
 * @author Alejandro
 */
public class ManejadorRecursosAulas {

    private Connection conexion = null;

    /**
     * Constructor de la Clase ManejadorRecursosAulas que recibe una conexion a la BD.
     * @param con Conexion a la BD, el cual se utilizara como el unico atributo de esta clase. (Connection conexion)
     */
    public ManejadorRecursosAulas(Connection con) {
        this.conexion = con;
    }

    /**
     * Crea un Recurso de tipo Aulas determinado en la BD.
     * @param recurso Es un objeto de tipo Recurso que contiene los datos del nuevo Recurso relacionados a la tabla Recurso. 
     * @param aula Representa la nueva aula que se esta agregando y contiene la informacion para la tabla Aulas.
     * @throws com.akcess.exception.AulasException Lanza excepciones del tipo AulasException, creada por el DAOGenerator.
     */
    public void CrearRecursoAula(Recurso recurso, Aulas aula) throws AulasException {
        try {

            int id_nuevoRecurso = 0;

            //Primero agregamos el nuevo recurso en la Tabla Recurso.
            RecursoDAOImpl manejadorRecurso = new RecursoDAOImpl();
            RecursoRecordCountDAOImpl manejadorContador = new RecursoRecordCountDAOImpl();
            RecursoRecordCount contador = manejadorContador.getRecordCount(this.conexion);
            int cantRegistros = contador.getCount();
            id_nuevoRecurso = 1 + cantRegistros;
            recurso.setId_recurso(id_nuevoRecurso);
            manejadorRecurso.insert(recurso, this.conexion);

            //Ahora agregamos el recurso nuevo a la tabla Aulas.
            AulasDAOImpl manejadorAulas = new AulasDAOImpl();
            aula.setId_recurso(id_nuevoRecurso);
            manejadorAulas.insert(aula, this.conexion);
        } catch (AulasException ex) {
            ex.printStackTrace();
        } catch (RecursoException ex) {
            ex.printStackTrace();
        } catch (RecursoRecordCountException ex) {
            ex.printStackTrace();
        }

    }

    /**
     * Realiza las modificaciones en la BD que fueron realizadas sobre un Recurso de Aula determinado, realizando las modificaciones
     * en las Tablas Recurso y Aulas.
     * @param recurso Representa el Recurso en la tabla Recurso que fue modificado.     
     * @param aula Representa el aula en la tabla Aulas que fue modificado.
     * @throws com.akcess.exception.AulasException Lanza excepciones del tipo AulasException, creada por el DAOGenerator.
     */
    public void ModificarRecursoAula(Recurso recurso, Aulas aula) throws AulasException {
        try {
            //Modificaciones en la tabla Aulas.
            AulasDAOImpl manejadorAulas = new AulasDAOImpl();
            AulasPK aulasPK = new AulasPK();
            aulasPK.setId_recurso(recurso.getId_recurso());
            manejadorAulas.update(aulasPK, aula, this.conexion);

//Modificaciones en la tabla Recurso.
            RecursoDAOImpl manejadorRecurso = new RecursoDAOImpl();
            RecursoPK recursoPK = new RecursoPK();
            recursoPK.setId_recurso(recurso.getId_recurso());
            Recurso recursoOriginal = manejadorRecurso.findByPrimaryKey(recursoPK, this.conexion);
            recurso.setBorrado(recursoOriginal.getBorrado());
            recurso.setFechacreacion(recursoOriginal.getFechacreacion());
            manejadorRecurso.update(recursoPK, recurso, this.conexion);

        } catch (AulasException ex) {
            ex.printStackTrace();
        } catch (RecursoException ex) {
            ex.printStackTrace();
        }
    }

    /**
     * Obtiene todos los Recursos de tipo Aulas existentes en la BD.
     * @return Un vector de tipo RecursoAulaCompleto, que contiene toda la informacion de cada Recurso de tipo Aulas.
     * @throws com.akcess.exception.AulasException Lanza excepciones del tipo Recurso_humanoException, creada por el DAOGenerator.
     */
    public RecursoAulaCompleto[] ListarRecursosAulas() throws AulasException {
        RecursoAulaCompleto[] recursos = null;
        try {
            AulasDAOImpl recursoDAO = new AulasDAOImpl();
            recursos = recursoDAO.ObtenerRecursoCompleto(this.conexion);
        } catch (AulasException ex) {
            ex.printStackTrace();
        }
        return recursos;
    }

    /**
     * Realiza el borrado de la BD de un Recurso de tipo Aulas determinado.
     * @param idRecurso Contiene el id del Recurso que sera eliminado o borrado logicamente.
     * @throws com.akcess.exception.RecursoException Lanza excepciones del tipo RecursoException, creada por el DAOGenerator.
     */
    public void BorrarRecursoAula(int idRecurso) throws RecursoException {
        RecursoPK recursoPK = new RecursoPK();
        recursoPK.setId_recurso((long) idRecurso);
        RecursoDAOImpl manejadorRecurso = new RecursoDAOImpl();
        Recurso recurso = manejadorRecurso.findByPrimaryKey(recursoPK, this.conexion);
        recurso.setBorrado(true);
        int cantResultado = manejadorRecurso.borrar(recursoPK, this.conexion);
        if (cantResultado == 0) {
            throw new RecursoException("El recurso no puede ser borrado.. Hay dependencias");
        }
    }

    /**
     * Obtiene de la BD un Recurso de tipo Aulas determinado por un id de recurso.
     * @return El Recurso de tipo Aulas especificado por idRecurso.
     * @param idRecurso Contiene el id del Recurso que debera ser buscado.
     * @throws com.akcess.exception.AulasException Lanza excepciones del tipo AulasException, creada por el DAOGenerator.
     */
    public RecursoAulaCompleto ObtenerRecursoAula(int idRecurso) throws AulasException {
        //Me conecto a la BD                   
        AulasDAOImpl manejadorRecurso = new AulasDAOImpl();
        RecursoAulaCompleto recurso = manejadorRecurso.EncontrarRecursoCompleto(idRecurso, this.conexion);
        return recurso;
    }

    /**
     * Retorna todas la ubicaciones que se tiene en la Base de Datos.
     * @return Un vector de tipo Ubicacion que contiene todas las ubicaciones.
     * @throws com.akcess.exception.UbicacionException Lanza excepciones del tipo UbicacionException, creada por el DAOGenerator.
     */
    public Ubicacion[] ObtenerUbicaciones() throws UbicacionException {
        try {
            UbicacionDAOImpl ManagerUbi = new UbicacionDAOImpl();
            Ubicacion[] ubicaciones = ManagerUbi.findAll(this.conexion);
            return ubicaciones;
        } catch (UbicacionException ex) {
            ex.printStackTrace();
            return null;
        }
    }
}
